// preload.js 在渲染进程加载之前运行
// 可以在这里安全地暴露 Node.js API 给渲染进程

console.log('[preload] Preload script starting...')

// 检查 electron 模块是否可用
let contextBridge, ipcRenderer
try {
  const electron = require('electron')
  contextBridge = electron.contextBridge
  ipcRenderer = electron.ipcRenderer
  console.log('[preload] Electron modules loaded:', {
    hasContextBridge: !!contextBridge,
    hasIpcRenderer: !!ipcRenderer
  })
} catch (error) {
  console.error('[preload] Failed to require electron:', error)
  throw error
}

console.log('[preload] Preload script loaded')

// 暴露受保护的方法给渲染进程
try {
  contextBridge.exposeInMainWorld('electronAPI', {
    // 系统信息
    platform: process.platform,
    versions: {
      node: process.versions.node,
      chrome: process.versions.chrome,
      electron: process.versions.electron
    },
    
    // 存储 API（替代 chrome.storage.local）
    storage: {
      // 获取存储值
      async get(keys) {
        return await ipcRenderer.invoke('storage:get', keys)
      },
      
      // 设置存储值
      async set(items) {
        return await ipcRenderer.invoke('storage:set', items)
      },
      
      // 删除存储值
      async remove(keys) {
        return await ipcRenderer.invoke('storage:remove', keys)
      },
      
      // 监听存储变化
      onChanged(callback) {
        ipcRenderer.on('storage:changed', (event, changes, namespace) => {
          callback(changes, namespace)
        })
      }
    },
    
    // 窗口控制 API
    window: {
      minimize() {
        console.log('[preload] minimize called')
        return ipcRenderer.invoke('window:minimize')
      },
      maximize() {
        console.log('[preload] maximize called')
        return ipcRenderer.invoke('window:maximize')
      },
      close() {
        console.log('[preload] close called')
        return ipcRenderer.invoke('window:close')
      },
      async isMaximized() {
        return await ipcRenderer.invoke('window:isMaximized')
      }
    }
  })
  console.log('[preload] electronAPI exposed successfully')
} catch (error) {
  console.error('[preload] Error exposing electronAPI:', error)
}
